package com.heu.blood.match.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heu.blood.application.vo.BloodApplicationHistoryVo;
import com.heu.blood.common.utils.PageUtils;
import com.heu.blood.match.dto.req.BloodInformationQueryPageReqDTO;
import com.heu.blood.match.entity.BloodInformationEntity;
import com.heu.blood.match.vo.BloodInformationEntityVo;
import com.heu.blood.match.vo.BloodInformationIdHistoryVo;
import com.heu.blood.match.vo.BloodInventoryResultVo;
import com.heu.blood.match.vo.InventoryQueryVo;
import com.heu.blood.statistic.entity.BloodStoreCountABO;
import com.heu.blood.statistic.entity.BloodStoreCountType;
import com.heu.blood.storge.vo.BloodDeleteReturnVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 
 *
 * @author lyj
 * @email lyj@heu.com
 * @date 2023-06-16 00:23:13
 */
public interface BloodInformationService extends IService<BloodInformationEntity> {

    PageUtils queryPage(BloodInformationQueryPageReqDTO requestParam);

    /**
     * 查询血液信息
     * @param bloodInformationEntityVo
     * @return
     */
    List<BloodInformationEntity> query(BloodInformationEntityVo bloodInformationEntityVo);

    /**
     * 根据血液id查询血液信息
     * @param bloodId
     * @return
     */
    BloodInformationEntity queryByBloodId(String bloodId);

    List<BloodInformationEntity> queryListByBloodId(String bloodId);

    //根据血液ID更改bloodinformation的状态 --入库出库用的到 其他也用的到吧
    boolean updateBloodStateByBloodId(String BloodId,String state);

    //根据血液ID更改血液检测标志testflag的状态 --入库用的到
    boolean updateTestFlagByBloodId(String BloodId);

    //入库在bloodinformation表中增添一条数据

    BloodInformationEntity InsertOneBloodInformationData(BloodInformationEntity bloodInformationEntity);

    //将map转化为bloodInformation对象
    BloodInformationEntity convertFromMapToEntity(Map bloodInformationMap);

    //查询血液库存按照类型统计
    List<BloodStoreCountType> selectBloodTypeCount();

    //查询库存血型统计数量 按照ABO分型
    List<BloodStoreCountABO> selectAboTypeCount();

    // 从excel表批量导入血液信息数据
    void importExcel(MultipartFile multipartFile);

    // 查询符合配血条件的血液
    List<BloodInformationEntity> searchMatchBlood(BloodInformationEntity bloodInformationEntity);

    //根据血液id列表更新血液入库表以及血液信息表为在库
    void batchUpdateInStockStateByBloodId(String[] bloodids);

    //根据血液id列表更新血液入库表以及血液信息表为退血
    void batchUpdateBloodReturnStateByBloodId(String[] bloodids);

    // 通过bloodId查询血袋的生命周期
    BloodInformationIdHistoryVo getBloodInformationIdHistory(String bloodId);

//    Map<String, Map<String, String>> getBloodInventory();

    BloodInventoryResultVo getBloodInventory(InventoryQueryVo inventoryQuery);

    int cascadeDelete( BloodDeleteReturnVo vo);

    List<BloodInformationEntity> allSelectedIds(Set<String> bloodIdSet);
}

